import { useRequest } from '@/hooks/index';
import { getDisplayText, getDict } from '@/utils/dataDictUtil';
import { useCallback } from 'react';

/**
 * 字典数据获取, 返回字典列表和根据value获取text的方法
 *
 * 缓存
 * 可自定义返回值的 key 值
 * 附带获取 text 名称的函数
 *
 * e.g.
 * const [fooOptions, getFooText] = useDictionary('foo')
 * const [fooOptions, getFooText] = useDictionary('foo', {...})
 *
 * @param code 字典 Code
 * @param options 其他选项 { isTree: 是否是树格式, textKey: 显示值的key, valueKey: value值的key, useCache: 是否使用缓存, isAuth: 是否鉴权 }
 * @return {(*[]|(function(...[*]=)))[]} dictList: 是字典列表(可作为下拉框的选项列表); getDictText: 通过value值来获取中文名称
 */
const useDictionary = (code, options = {}) => {
    const { isTree = false, textKey = 'text', valueKey = 'value', useCache = true, isAuth = true } = options;
    const { data: dictList } = useRequest(() => getDict(code, isTree ? 1 : 0, { textKey, valueKey }, useCache, isAuth));
    const getDictText = useCallback(
        value => getDisplayText(dictList, `${value === undefined ? '' : value}`, { textKey, valueKey }) || value,
        [dictList, textKey, valueKey]
    );
    return [dictList, getDictText];
};

export default useDictionary;
